#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

class AA{
public:
    AA()
    {
    	p=new char[10];
    	strcpy(p,"hello");
    }

	//使用拷贝构造函数是实现深拷贝的一种方法
	AA(const AA &obj)
	{
		p=new char[10];
		strcpy(p,obj.p);
		printf("AA(const AA &obj)....\n");
	}

	//重载等号操作是另一种方式
	AA& operator=(AA &obj1)
	{
		//1 先释放旧的内存
		if (this->p != NULL)
		{
			delete[] p;
		}
		//2 分配内存大小
		this->p= new char [10];
		
		//3赋值
		strcpy(p, obj1.p);
		printf("operator=.....\n");
		return *this;
	}

    ~AA()
    {
    	//不写此判断语句体现不出深浅拷贝问题    
    	if(p!=NULL)
    	{
    			delete [] p;
    	}
    
    	printf("~AA()\n");
    }
private:
     char *p;
};


int main()
{
	AA m;
	AA m2;
	AA n=m;//拷贝构造函数深拷贝
    
    //n.operator=(m)
    n=m;//重载深拷贝
    
    m2=n=m;//重载函数返回了引用，可以当左值。

	return 0;
}
